﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using RaytracerLib;
using RaytracerLib.Layers;
using RaytracerLib.MathLib;
using RaytracerLib.RenderableObjects;
using RaytracerLib.Postprocessing.LightCorrector;
using RaytracerLib.Resamplers;
using RaytracerLib.Samplers;
using RaytracerLib.Volumes;
using TomanuExtensions;
using RaytracerLib.ShadowTesters;
using RaytracerLib.Attenuations;
using System.Reflection;
using RaytracerLib.Layers.Interpolators;
using RaytracerLib.Layers.OverlayCorrectors;
using RaytracerLib.Lights;
using System.Globalization;
using RaytracerLib.MathLib.Polynomials;
using RaytracerLib.UVMappers;
using RaytracerLib.MathLib.RootFinders;
using YAXLib;
using RaytracerLib.Cameras;
using RaytracerLib.Postprocessing;

namespace Raytracer.Generator
{
    partial class TestScenes
    {
        private static void Generate_0280_0289()
        {
            List.Add(new TestScene()
            {
                Name = "rotate sphere around vector 5",
                Path = "Transforms", 
                Index = 280,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(false);
                    Fast(scene);
                    scene.ActiveCamera.Film.MaxRayDepth = 2;
                    scene.RenderableObjects["sphere"].RotateAroundForward(10);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "rotate sphere around vector 6",
                Path = "Transforms", 
                Index = 281,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(false);
                    Fast(scene);
                    scene.ActiveCamera.Film.MaxRayDepth = 2;
                    scene.RenderableObjects["sphere"].RotateAroundForward(10);
                    scene.RenderableObjects["sphere"].RotateAroundUp(10);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "rotate sphere around vector 7",
                Path = "Transforms", 
                Index = 282,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(false);
                    Fast(scene);
                    scene.ActiveCamera.Film.MaxRayDepth = 2;
                    scene.RenderableObjects["sphere"].RotateAroundForward(10);
                    scene.RenderableObjects["sphere"].RotateAroundUp(10);
                    scene.RenderableObjects["sphere"].RotateAroundRight(10);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "rotate sphere around vector 8",
                Path = "Transforms", 
                Index = 283,
                GetScene = () =>
                {
                    Scene scene = Scenes.Procedural_Layer(false);
                    Fast(scene);
                    scene.ActiveCamera.Film.MaxRayDepth = 2;
                    foreach (var ele in scene.Actors)
                        ele.RotateAround(new Vector3(3, 4, -5), new Vector3(2, 3, 5), 34);
                    return scene;
                }
            });
        }

        private static void Generate_0290_0299()
        {
            List.Add(new TestScene()
            {
                Name = "gamma 1",
                Path = "Postprocessors\\Gamma", 
                Index = 290,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["sphere"].DefaultMaterial =
                                TestMaterials.EarthSimple("earth_simple");
                    scene.ActiveCamera.Film.MaxRayDepth = 2;
                    scene.ActiveCamera.Film.Postprocessors.Add(new GammaCorrector() { GammaFactor = 1.2 });
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "gamma 2",
                Path = "Postprocessors\\Gamma", 
                Index = 291,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["sphere"].DefaultMaterial =
                                TestMaterials.EarthSimple("earth_simple");
                    scene.ActiveCamera.Film.MaxRayDepth = 2;
                    scene.ActiveCamera.Film.Postprocessors.Add(new GammaCorrector() { GammaFactor = 0.8 });
                    return scene;
                }
            });
        }

        private static void Generate_0310_0329()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere 1",
                Path = "Transforms", 
                Index = 310,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 2",
                Path = "Transforms", 
                Index = 311,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(1, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 3",
                Path = "Transforms", 
                Index = 312,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 4",
                Path = "Transforms", 
                Index = 313,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 5",
                Path = "Transforms", 
                Index = 314,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 6",
                Path = "Transforms", 
                Index = 315,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(1, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 7",
                Path = "Transforms", 
                Index = 316,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 8",
                Path = "Transforms", 
                Index = 317,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 9",
                Path = "Transforms", 
                Index = 318,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 10",
                Path = "Transforms", 
                Index = 319,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    return scene;
                }
            });
        }

        private static void Generate_0320_0329()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere 11",
                Path = "Transforms", 
                Index = 320,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    sphere1.RotateAroundForward(45);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 12",
                Path = "Transforms", 
                Index = 321,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.ScaleX = 2;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 13",
                Path = "Transforms", 
                Index = 322,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 14",
                Path = "Transforms", 
                Index = 323,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(2, 2, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(2, 2, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 15",
                Path = "Transforms", 
                Index = 324,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(1, 1, -12);
                    sphere1.ScaleX = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere 16",
                Path = "Transforms", 
                Index = 325,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.Shiny("ShinyGreen", new ColorFloat(0, 1, 0));
                    sphere1.Pos = new Vector3(5, 5, 2);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(3, 3, -12);
                    scene.ActiveCamera.RotateAroundRight(1);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });
        }

        private static void Generate_0330_0349()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere texture 1",
                Path = "Transforms", 
                Index = 330,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 2",
                Path = "Transforms", 
                Index = 331,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(1, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 3",
                Path = "Transforms", 
                Index = 332,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 4",
                Path = "Transforms", 
                Index = 333,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 5",
                Path = "Transforms", 
                Index = 334,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 6",
                Path = "Transforms", 
                Index = 335,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(1, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 7",
                Path = "Transforms", 
                Index = 336,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 8",
                Path = "Transforms", 
                Index = 337,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 9",
                Path = "Transforms", 
                Index = 338,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 10",
                Path = "Transforms", 
                Index = 339,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    return scene;
                }
            });
        }

        private static void Generate_0340_0349()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere texture 11",
                Path = "Transforms", 
                Index = 340,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    sphere1.RotateAroundForward(45);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 12",
                Path = "Transforms", 
                Index = 341,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.ScaleX = 2;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 13",
                Path = "Transforms", 
                Index = 342,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 14",
                Path = "Transforms", 
                Index = 343,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(2, 2, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(2, 2, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 15",
                Path = "Transforms", 
                Index = 344,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(1, 1, -12);
                    sphere1.ScaleX = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere texture 16",
                Path = "Transforms", 
                Index = 345,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.EarthSimple("EarthSimple");
                    sphere1.Pos = new Vector3(5, 5, 2);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(3, 3, -12);
                    scene.ActiveCamera.RotateAroundRight(1);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });
        }

        private static void Generate_0350_0359()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere checker 1",
                Path = "Transforms", 
                Index = 350,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 2",
                Path = "Transforms", 
                Index = 351,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(1, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 3",
                Path = "Transforms", 
                Index = 352,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 4",
                Path = "Transforms", 
                Index = 353,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 5",
                Path = "Transforms", 
                Index = 354,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 6",
                Path = "Transforms", 
                Index = 355,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(1, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 7",
                Path = "Transforms", 
                Index = 356,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 8",
                Path = "Transforms", 
                Index = 357,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleY = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 9",
                Path = "Transforms", 
                Index = 358,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 10",
                Path = "Transforms", 
                Index = 359,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    return scene;
                }
            });
        }

        private static void Generate_0360_0369()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere checker 11",
                Path = "Transforms", 
                Index = 360,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(0, 0, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleX = 4;
                    sphere1.RotateAroundForward(45);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 12",
                Path = "Transforms", 
                Index = 361,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(1, 1, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.ScaleX = 2;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 13",
                Path = "Transforms", 
                Index = 362,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(0, 0, -12);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 14",
                Path = "Transforms", 
                Index = 363,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(2, 2, 0);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(2, 2, -12);
                    sphere1.ScaleX = 4;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 15",
                Path = "Transforms", 
                Index = 364,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(5, 5, 10);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(1, 1, -12);
                    sphere1.ScaleX = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere checker 16",
                Path = "Transforms", 
                Index = 365,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    SphereObject sphere1 = scene.RenderableObjects["sphere1"] as SphereObject;
                    scene.RenderableObjects.Remove("sphere2");
                    scene.RenderableObjects.Remove("plane");
                    sphere1.Up = Vector3.YAXIS;
                    sphere1.Right = Vector3.XAXIS;
                    sphere1.Forward = Vector3.ZAXIS;
                    scene.Lights["light1"].Pos = new Vector3(0, 0, -5);
                    scene.Lights["light1"].Color = ColorFloat.White;
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    scene.Lights.RemoveAt(1);
                    sphere1.DefaultMaterial = TestMaterials.CheckBoard("checker",
                        ColorFloat.SRGB_Blue, ColorFloat.SRGB_Yellow, 0.2, 0.2);
                    sphere1.Pos = new Vector3(5, 5, 2);
                    scene.ActiveCamera.Up = Vector3.YAXIS;
                    scene.ActiveCamera.Right = Vector3.XAXIS;
                    scene.ActiveCamera.Forward = Vector3.ZAXIS;
                    scene.ActiveCamera.Pos = new Vector3(3, 3, -12);
                    scene.ActiveCamera.RotateAroundRight(1);
                    sphere1.ScaleZ = 4;
                    sphere1.RotateAroundRight(90);
                    sphere1.RotateAroundUp(45);
                    return scene;
                }
            });
        }

        private static void Generate_0370_0379()
        {
            List.Add(new TestScene()
            {
                Name = "scale sphere pos",
                Path = "Transforms", 
                Index = 370,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["sphere"].Pos = new Vector3(0, 1, 0);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere radius",
                Path = "Transforms", 
                Index = 371,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    (scene.RenderableObjects["sphere"] as SphereObject).Radius = 2;
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere bump moved",
                Path = "Transforms", 
                Index = 372,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Bump(true);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere bump moved rotate 1",
                Path = "Transforms", 
                Index = 373,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Bump(true);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].RotateAroundUp(10);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere bump moved rotate 2",
                Path = "Transforms", 
                Index = 374,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Bump(true);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].RotateAroundRight(10);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere bump moved rotate 3",
                Path = "Transforms", 
                Index = 375,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Bump(true);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].RotateAroundForward(10);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere bump moved rotate 4",
                Path = "Transforms", 
                Index = 376,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Bump(true);
                    Fast(scene);
                    scene.RenderableObjects["sphere"].RotateAroundForward(10);
                    scene.RenderableObjects["sphere"].RotateAroundRight(10);
                    scene.RenderableObjects["sphere"].RotateAroundUp(10);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale sphere bump inside",
                Path = "Transforms", 
                Index = 377,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Inside();
                    Fast(scene);
                    scene.RenderableObjects[0].DefaultMaterial = TestMaterials.BumpCircle("BumpCircle");
                    Layer.SetScale(scene.RenderableObjects[0].DefaultMaterial.Diffuse as Layer,
                        new Vector2(0.15, 0.15));
                    Layer.SetScale(scene.RenderableObjects[0].DefaultMaterial.Tangents as Layer,
                        new Vector2(0.15, 0.15));
                    scene.RenderableObjects[0].RotateAroundUp(180);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    scene.Lights["light"].Pos = new Vector3(0, 1.1, 1.65);
                    scene.ActiveCamera.RotateAroundRight(-20);
                    (scene.ActiveCamera as PerspectiveCamera).MinimalPlaneDistant = 2.8;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "earth bump",
                Path = "Bump", 
                Index = 378,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Bump(true);
                    scene.RenderableObjects["sphere"].DefaultMaterial = TestMaterials.EarthBump("earth");
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "earth bump inside",
                Path = "Inside", 
                Index = 379,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Inside();
                    Fast(scene);
                    scene.RenderableObjects[0].DefaultMaterial.ReflectionTransmittance = null;
                    scene.RenderableObjects[0].DefaultMaterial = TestMaterials.EarthBump("earth");
                    scene.RenderableObjects[0].RotateAroundUp(180);
                    scene.RenderableObjects["sphere"].ScaleX = 1.5;
                    scene.Lights["light"].Pos = new Vector3(0, 1.4, 1);
                    scene.ActiveCamera.RotateAroundRight(-20);
                    return scene;
                }
            });

        }

        private static void Generate_0390_0399()
        {
            List.Add(new TestScene()
            {
                Name = "scale plane_move",
                Path = "Transforms", 
                Index = 390,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    scene.RenderableObjects["plane"].Pos = new Vector3(0, -1, 0);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane create 1",
                Path = "Transforms", 
                Index = 391,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    var plane = new PlaneObject(new Vector3(0, 1, -0.2), 0, Vector3.XAXIS);
                    plane.DefaultMaterial = scene.RenderableObjects["plane"].DefaultMaterial;
                    scene.RenderableObjects["plane"] = plane;
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane_create_2",
                Path = "Transforms", 
                Index = 392,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    var plane = new PlaneObject(new Vector3(0, 1, -0.2), Vector3.XAXIS)
                    {
                        Pos = new Vector3(0, -0.5, 0)
                    };
                    plane.DefaultMaterial = scene.RenderableObjects["plane"].DefaultMaterial;
                    scene.RenderableObjects["plane"] = plane;
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane_create_3",
                Path = "Transforms", 
                Index = 393,
                GetScene = () =>
                {
                    Scene scene = Scenes.Spheres_Two_above_plane();
                    Fast(scene);
                    var plane = new PlaneObject(new Vector3(0, 0, 0),
                        new Vector3(1, 1, 0), new Vector3(0, 0, -1));
                    plane.DefaultMaterial = scene.RenderableObjects["plane"].DefaultMaterial;
                    scene.RenderableObjects["plane"] = plane;
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane_rotate_x",
                Path = "Transforms", 
                Index = 394,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["plane"].RotateAroundRight(3);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane_rotate_z",
                Path = "Transforms", 
                Index = 395,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["plane"].RotateAroundForward(3);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane_rotate_y",
                Path = "Transforms", 
                Index = 396,
                GetScene = () =>
                {
                    Scene scene = Scenes.Sphere_Earth();
                    Fast(scene);
                    scene.RenderableObjects["plane"].RotateAroundUp(3);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale layer rotate 2d",
                Path = "Transforms", 
                Index = 397,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    Layer.InsertBefore(scene.RenderableObjects["plane"].DefaultMaterial,
                        scene.RenderableObjects["plane"].DefaultMaterial.Tangents as Layer,
                        LayersFactory.Transform(null,
                        Matrix3.CreateRotate(20)));
                    Layer.InsertBefore(scene.RenderableObjects["plane"].DefaultMaterial,
                        scene.RenderableObjects["plane"].DefaultMaterial.Diffuse as Layer,
                        LayersFactory.Transform(null,
                        Matrix3.CreateRotate(20)));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale layer scale 2d",
                Path = "Transforms", 
                Index = 398,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    Layer.InsertBefore(scene.RenderableObjects["plane"].DefaultMaterial,
                        scene.RenderableObjects["plane"].DefaultMaterial.Tangents as Layer,
                        LayersFactory.Scale(null,
                        new Vector2(2, 1)));
                    Layer.InsertBefore(scene.RenderableObjects["plane"].DefaultMaterial,
                        scene.RenderableObjects["plane"].DefaultMaterial.Diffuse as Layer,
                        LayersFactory.Scale(null,
                        new Vector2(2, 1)));
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump center",
                Path = "Transforms", 
                Index = 399,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    return scene;
                }
            });
        }

        private static void Generate_0400_0409()
        {
            List.Add(new TestScene()
            {
                Name = "scale plane bump moved",
                Path = "Transforms", 
                Index = 400,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump center rotate 4",
                Path = "Transforms", 
                Index = 401,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundForward(30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump center rotate 6",
                Path = "Transforms", 
                Index = 402,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundRight(30);
                    scene.RenderableObjects["plane"].RotateAroundForward(30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump moved rotate 1",
                Path = "Transforms", 
                Index = 403,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump moved rotate 5",
                Path = "Transforms", 
                Index = 404,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundRight(30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump moved rotate 6",
                Path = "Transforms", 
                Index = 405,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundRight(30);
                    scene.RenderableObjects["plane"].RotateAroundForward(30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump back center",
                Path = "Transforms", 
                Index = 406,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    scene.RenderableObjects["plane"].RotateAroundForward(180);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump back moved",
                Path = "Transforms", 
                Index = 407,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundForward(180);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump back center rotate 1",
                Path = "Transforms", 
                Index = 408,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    scene.RenderableObjects["plane"].RotateAroundRight(180);
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump back center rotate 4",
                Path = "Transforms", 
                Index = 409,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundForward(180);
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundForward(30);
                    return scene;
                }
            });
        }

        private static void Generate_0410_0419()
        {
            List.Add(new TestScene()
            {
                Name = "scale plane bump back moved rotate 3",
                Path = "Transforms", 
                Index = 410,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleX = 2;
                    scene.RenderableObjects["plane"].RotateAroundRight(180);
                    scene.RenderableObjects["plane"].RotateAroundForward(-30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale plane bump back moved rotate 4",
                Path = "Transforms", 
                Index = 411,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundForward(180);
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundForward(30);
                    return scene;
                }
            });

            List.Add(new TestScene()
            {
                Name = "scale y",
                Path = "Transforms", 
                Index = 412,
                GetScene = () =>
                {
                    Scene scene = Scenes.Plane_Bump(false);
                    scene.RenderableObjects["plane"].ScaleY = 2;
                    scene.RenderableObjects["plane"].ScaleZ = 2;
                    scene.RenderableObjects["plane"].RotateAroundForward(180);
                    scene.RenderableObjects["plane"].RotateAroundUp(10);
                    scene.RenderableObjects["plane"].RotateAroundForward(30);
                    return scene;
                }
            });
        }

        private static void Generate_0420_0500()
        {
            int index = 420;

            for (int i = 230; i <= 279; i++)
            {
                if (i == 232)
                    continue;
                if (i == 233)
                    continue;

                TestScene base_scene = List.FirstOrDefault(t => t.Index == i);

                if (base_scene == null)
                    continue;

                List.Add(new TestScene()
                {
                    Name = "Scale X " + base_scene.Name.ToLower().Replace("_", " "),
                    Path = "Transforms", 
                    Index = index++,
                    GetScene = () =>
                    {
                        Scene scene = base_scene.CreateScene();
                        scene.RenderableObjects["t1"].ScaleX = 1.2;
                        scene.RenderableObjects["t2"].ScaleX = 1.2;
                        return scene;
                    }
                });

                List.Add(new TestScene()
                {
                    Name = "Scale Y " + base_scene.Name.ToLower().Replace("_", " "),
                    Path = "Transforms", 
                    Index = index++,
                    GetScene = () =>
                    {
                        Scene scene = base_scene.CreateScene();
                        scene.RenderableObjects["t1"].ScaleY = 1.2;
                        scene.RenderableObjects["t2"].ScaleY = 1.2;
                        return scene;
                    }
                });

                List.Add(new TestScene()
                {
                    Name = "Scale Z " + base_scene.Name.ToLower().Replace("_", " "),
                    Path = "Transforms", 
                    Index = index++,
                    GetScene = () =>
                    {
                        Scene scene = base_scene.CreateScene();
                        scene.RenderableObjects["t1"].ScaleZ = 1.2;
                        scene.RenderableObjects["t2"].ScaleZ = 1.2;
                        return scene;
                    }
                });
            }
        }
    }
}